import { createRouter, createWebHistory } from 'vue-router'
import type { RouteRecordRaw } from 'vue-router'
import { qiankunWindow } from 'vite-plugin-qiankun/dist/helper'

// 路由配置
const routes: RouteRecordRaw[] = [
  {
    path: '/login',
    name: 'Login',
    component: () => import('../views/Login.vue')
  },
  {
    path: '/',
    name: 'Home',
    component: () => import('../views/Home.vue'),
    meta: { requiresAuth: true }
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('../views/About.vue'),
    meta: { requiresAuth: true }
  },
  {
    path: '/user',
    name: 'User',
    component: () => import('../views/User.vue'),
    meta: { requiresAuth: true }
  }
]

// 创建路由实例
const router = createRouter({
  // 使用适合微前端的路由模式
  history: createWebHistory(
    qiankunWindow.__POWERED_BY_QIANKUN__ ? '/firstApp/' : '/'
  ),
  routes
})

// 全局变量，存储从主应用获取的token
let mainAppToken = ''

// 设置主应用token的方法
export const setMainAppToken = (token) => {
  mainAppToken = token
  // 可以同时存储到localStorage，便于持久化
  if (token) {
    localStorage.setItem('mainAppToken', token)
  }
}

// 路由守卫
router.beforeEach((to, from, next) => {
  // 判断是否需要登录权限
  if (to.matched.some(record => record.meta.requiresAuth)) {
    // 判断是否从主应用获取了token
    if (mainAppToken) {
      // 有主应用token，直接通过
      next()
    } else {
      // 检查子应用自己的token
      const subAppToken = localStorage.getItem('subAppToken')
      if (subAppToken) {
        // 有子应用token，通过
        next()
      } else {
        // 没有任何token，跳转到登录页
        next({ name: 'Login' })
      }
    }
  } else {
    // 不需要登录权限的页面直接通过
    next()
  }
})

export default router